"use strict";
const path = require("path");
const defaultSettings = require("./src/settings.js");

function resolve(dir) {
  return path.join(__dirname, dir);
}

const name = defaultSettings.title || "后台管理系统"; // page title
const CompressionPlugin = require("compression-webpack-plugin");

const port = process.env.port || process.env.npm_config_port || 9528; // dev port

module.exports = {
  publicPath:
    process.env.NODE_ENV == "production" ? "./storage/assets/cadmin" : "./",
  outputDir: "../copartner/storage/app/public/assets/cadmin",
  assetsDir: "static",
  lintOnSave: false,
  productionSourceMap: false,
  devServer: {
    port: port,
    open: true,
    overlay: {
      warnings: false,
      errors: true
    },
    // 代理
    proxy: {
      // change xxx-api/login => mock/login               
      [process.env.VUE_APP_BASE_API]: {
        target: `http://test.caidj.net.cn/Admin`,
        // target: `http://cqnx.caidj.net.cn/Admin`,
        ws: true, //proxy websockets
        changeOrigin: true,
        pathRewrite: {
          ["^" + process.env.VUE_APP_BASE_API]: ""
        }
      },
      "/scan_login": {
        target: `http://pay.caidj.cn/scan_login`,
        changeOrigin: true,
        pathRewrite: {
          "^/scan_login": ""
        }
      },
      "/CustomerService": {
        target: `http://sort.caidj.com/CustomerService`,
        changeOrigin: true,
        pathRewrite: {
          "^/CustomerService": ""
        }
      }
    }
  },
  configureWebpack: {
    name: name,
    resolve: {
      alias: {
        "@": resolve("src")
      }
    }
  },
  chainWebpack(config) {
    config.plugins.delete("preload");
    config.plugins.delete("prefetch");

    config.module
      .rule("svg")
      .exclude.add(resolve("src/icons"))
      .end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(resolve("src/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]"
      })
      .end();

    config.module
      .rule("vue")
      .use("vue-loader")
      .loader("vue-loader")
      .tap(options => {
        options.compilerOptions.preserveWhitespace = true;
        return options;
      })
      .end();

    config.when(process.env.NODE_ENV === "development", config =>
      config.devtool("cheap-source-map")
    );

    config.when(process.env.NODE_ENV !== "development", config => {
      config
        .plugin("ScriptExtHtmlWebpackPlugin")
        .after("html")
        .use("script-ext-html-webpack-plugin", [
          {
            inline: /runtime\..*\.js$/
          }
        ])
        .end();
      config.optimization.splitChunks({
        chunks: "all",
        cacheGroups: {
          libs: {
            name: "chunk-libs",
            test: /[\\/]node_modules[\\/]/,
            priority: 10,
            chunks: "initial"
          },
          elementUI: {
            name: "chunk-elementUI",
            priority: 20,
            test: /[\\/]node_modules[\\/]_?element-ui(.*)/
          },
          commons: {
            name: "chunk-commons",
            test: resolve("src/components"), // can customize your rules
            minChunks: 3, //  minimum common number
            priority: 5,
            reuseExistingChunk: true
          }
        }
      });
      config.optimization.runtimeChunk("single");
    });
  },
  pluginOptions: {
    CompressionPlugin: new CompressionPlugin({
      filename: "[path].gz[query]",
      algorithm: "gzip",
      test: /\.(js|css|html|svg)$/,
      threshold: 0,
      minRatio: 0.7,
      deleteOriginalAssets: true // 删除原文件
    })
  }
};
